package cuiweiyou.controller;

import java.io.IOException;
import java.io.Writer;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
 
@SessionAttributes(value={"jjj"}, types={String.class}) // 匹配注解了的功能中相应的key进行session级别缓存。此注解只能用在类上
@Controller
public class HelloController {
	
	@RequestMapping("/modelSession")
	public String modelSession(Map<String, Object> map){
		map.put("jjj", "好大J"); // 同时存入session作用域。本类使用@SessionAttributes进行了相应注解
		return "success";
	}
	
	@RequestMapping("/modelMap")
	public String modelMap(Map<String, Object> map){ // 参数也可以是 Model、ModelMap
		map.put("jjj", "好大J"); // 在s.jsp可以取到的属性
		return "success";
	}
	
	@RequestMapping("/model-view")
	public ModelAndView modelandview(){
		ModelAndView mv = new ModelAndView("success"); // 跳转到success.jsp
		mv.addObject("kkk", "好大v"); // 在s.jsp可以取到的属性
		return mv;
	}
	
	@RequestMapping("/serlvet")
	public void serlvet( // 这里可用的参数，通过debug模式可以查找到。
			// 根据须要指定系统自动传入的参数：HttpSession、Principal、Locale、InputStream、OutputStream、Reader、及下面3个
			HttpServletRequest req, 
			HttpServletResponse res, 
			Writer writer) throws IOException{
		System.out.println(req + " - " + res);
		writer.write("hehe");
		// return "success"; // return void 直接在本页面打印
	}
	
	@RequestMapping("/pojo") // form 表单 post
	public String pojo(User user){ // 将post的参数用pojo进行封装
		System.out.println("来者：" + user);
		return "success";
	}
	
	@RequestMapping("/requestparam") // 普通get请求
	public String requestparam( // 如果映射的参数不存在，404
			// 映射请求时携带的“uname”参数
			@RequestParam("uname") String name,
			// 映射请求时携带的“uage”参数。required是否必须，默认true。defaultValue默认值，如果不指定，须用Integer封装，也就是映射为一个对象
			@RequestParam(value="uage", required=false, defaultValue="0") int age){
		System.out.println("来者：" + name + "，年龄：" + age);
		return "success";
	}

	@RequestMapping(
			value="/rest/{id}",
			method=RequestMethod.DELETE)
	public String restDELETE(@PathVariable("id")int id){
		System.out.println("rest delete " + id);
		return "success";
	}
}
